home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
txl
/
c!!20.lha
/
C++2.0
/
Txl
/
C++2.0.Grammar
< prev
Wrap
Text File
|
1992-02-29
|
12KB
|
594 lines
% C++ 2.0 TXL Basis Grammar
% J.R. Cordy, 24 Feb 1992
% Loosely adapted from:
% Unix System V, AT&T C++ Language System, Release 2.0
% Appendix A: Grammar Summary
% but with the (as usual) many bugs in the C++ grammar fixed, and the
% forms tuned for TXL performance. As noted in the reference above,
% this grammar is actually a slight superset of C++ 2.0.
% Lexical conventions of C++
comments
//
/* */
end comments
compounds
!= '%= && &= *= ++ += -+ -- -=
-> ->* .* ... /= :: << <<= <=
== >= >> >>= ^= |= || **
end compounds
keys
asm auto break case catch char class const
continue default delete do double else enum extern
float for friend goto if inline int long
new operator private protected public register return short
signed sizeof static struct switch template this typedef
union unsigned virtual void volatile while
end keys
define identifier
[repeat '_] [id]
end define
define string
[repeat stringlit+]
end define
define character_constant
[charlit]
end define
define floating_constant
[opt '-] [number]
end define
define integer_constant
[opt '-] 0 [SPOFF] [id] [SPON]
| [opt '-] [integernumber]
end define
% TXL 6.2 explicit spacing controllers - not in TXL 6.0, sorry!
define SPOFF
[empty]
end define
define SPON
[empty]
end define
% Txl grammar goal symbol - a C++ compilation file
define program
[repeat declaration]
end define
% Syntax of C++ 2.0
define expression
[list assignment_expression+]
end define
define assignment_expression
[conditional_expression]
| [unary_expression] [assignment_operator] [assignment_expression]
end define
define assignment_operator
= | *= | /= | '%= | += | -= | >>= | <<= | &= | ^= | '|=
end define
define conditional_expression
[binary_expression] [opt conditional_operation]
end define
define conditional_operation
? [expression] : [conditional_expression]
end define
define binary_expression
[cast_expression] [repeat binary_operation]
end define
define binary_operation
[binary_operator] [cast_expression]
end define
define binary_operator
'|| | && | '| | ^ | & | == | != | < | > | <= | >=
| << | >> | + | - | * | / | '% | .* | ->*
end define
define cast_expression
[unary_expression]
| ( [type_name] ) [cast_expression]
end define
define unary_expression
[postfix_expression]
| ++ [unary_expression]
| -- [unary_expression]
| [unary_operator] [cast_expression]
| 'sizeof [unary_expression]
| 'sizeof ( [type_name] )
| [allocation_expression]
| [deallocation_expression]
end define
define unary_operator
* | & | + | - | ! | ~
end define
define allocation_expression
[opt '::] 'new [opt placement] [restricted_type_name] [opt initializer]
end define
define placement
( [expression_list] )
end define
define restricted_type_name
[type_specifiers] [opt restricted_declarator]
| ( [type_name] )
end define
define restricted_declarator
[ptr_operator] [opt restricted_declarator]
| [restricted_declarator] '[ [opt expression] ']
end define
define deallocation_expression
[opt '::] 'delete [cast_expression]
| [opt '::] 'delete '[ [expression] '] [cast_expression]
end define
define postfix_expression
[primary_expression] [repeat postfix_extension]
| [simple_type_name] ( [opt expression_list] ) [repeat postfix_extension]
end define
define postfix_extension
'[ [expression] ']
| ( [opt expression_list] )
| . [name]
| -> [name]
| ++
| --
end define
define expression_list
[list assignment_expression+]
end define
define primary_expression
[literal]
| 'this
| :: [identifier]
| :: [operator_function_name]
| ( [expression] )
| [name]
end define
define name
[identifier]
| [qualified_name]
| [operator_function_name]
| [conversion_function_name]
end define
define qualified_name
[identifier] :: [class_component]
end define
define class_component
[opt '~] [identifier]
| [operator_function_name]
| [conversion_function_name]
end define
define literal
[integer_constant]
| [character_constant]
| [floating_constant]
| [string]
end define
define declaration
[linkage_specification]
| [class_definition]
| [opt decl_specifiers] [opt declarator_list] ; [NL]
| [fct_definition]
| [asm_declaration]
| [preprocessor] [NL]
end define
define class_definition
[NL] [repeat sc_specifier] [class_specifier]
[opt declarator_list] ; [NL] [NL]
end define
define asm_declaration
'asm ( [string] ) ; [NL]
end define
define decl_specifier
[sc_specifier]
| [type_specifier]
| [fct_specifier]
| 'friend
| 'typedef
% | [template_specifier] % experimental, undefined
end define
define decl_specifiers
[repeat decl_specifier+]
end define
define sc_specifier
'auto
| 'register
| 'static
| 'extern
end define
define fct_specifier
'inline
| 'virtual
end define
define type_specifier
[simple_type_name]
| [class_specifier]
| [enum_specifier]
| [elaborated_type_specifier]
| 'const
| 'volatile
end define
define type_specifiers
[repeat type_specifier+]
end define
define simple_type_name
[identifier]
| 'char | 'short | 'int | 'long | 'signed | 'unsigned
| 'float | 'double | 'void
end define
define elaborated_type_specifier
[class_key] [identifier]
| 'enum [identifier]
end define
define class_key
'class | 'struct | 'union
end define
define enum_specifier
'enum [opt identifier] { [opt enum_list] }
end define
define enum_list
[list enumerator+]
end define
define enumerator
[identifier] [opt equal_constant_expression]
end define
define equal_constant_expression
= [constant_expression]
end define
define constant_expression
[conditional_expression]
end define
define linkage_specification
[NL] 'extern [string] { [NL] [IN]
[declaration_list] [EX]
} [opt ';] [NL] [NL]
| 'extern [string] [declaration]
end define
define declaration_list
[repeat declaration]
end define
define declarator_list
[list init_declarator+]
end define
define init_declarator
[declarator] [opt initializer]
end define
define declarator
[repeat ptr_operator] [dname] [repeat declarator_extension]
| ( [declarator] ) [repeat declarator_extension]
end define
define declarator_extension
( [argument_declaration_list] ) [opt cv_qualifier_list]
| '[ [opt constant_expression] ']
end define
define ptr_operator
[stars] [opt cv_qualifier_list]
| & [opt cv_qualifier_list]
| [identifier] :: [stars] [opt cv_qualifier_list]
end define
define stars
* | **
end define
define cv_qualifier_list
[repeat cv_qualifier+]
end define
define cv_qualifier
'const
| 'volatile
end define
define dname
[name]
| ~ [identifier]
end define
define type_name
[type_specifiers] [opt abstract_declarator]
end define
define abstract_declarator
[ptr_operator] [repeat abstract_extension]
| ( [abstract_declarator] ) [repeat abstract_extension]
end define
define abstract_extension
( [argument_declaration_list] ) [opt cv_qualifier_list]
| '[ [opt constant_expression] ']
| [ptr_operator]
| ( [abstract_declarator] )
end define
define argument_declaration_list
[opt arg_declaration_list] [opt comma_dotdotdot]
end define
define comma_dotdotdot
[opt ',] '...
end define
define arg_declaration_list
[list argument_declaration+]
end define
define argument_declaration
[decl_specifiers] [declarator] [opt equal_expression]
| [decl_specifiers] [opt abstract_declarator] [opt equal_expression]
end define
define equal_expression
= [expression]
end define
define fct_definition
[NL]
[opt decl_specifiers] [declarator] [opt ctor_initializer] [fct_body]
end define
define fct_body
[NL] [compound_statement] [opt ';] [NL]
end define
define initializer
= [expression]
| = { [IN] [list expression] [EX] }
| = { [IN] [initializer_list] [opt ',] [EX] [NL] }
| ( [expression_list] )
end define
define initializer_list
[list initializer_element+]
end define
define initializer_element
[expression]
| [NL] { [IN] [initializer_list] [opt ',] [EX] }
end define
define class_specifier
[class_head] { [NL] [IN]
[repeat member_list] [EX]
}
end define
define class_head
[class_key] [opt identifier] [opt base_spec]
end define
define member_list
[EX] [repeat access_specifier_colon] [IN]
[repeat member_declaration]
end define
define access_specifier_colon
[access_specifier] : [NL]
end define
define member_declaration
[opt decl_specifiers] [opt member_declarator_list] ; [NL]
| [fct_definition]
| [qualified_name] ; [NL]
| [preprocessor] [NL]
end define
define member_declarator_list
[list member_declarator+]
end define
define member_declarator
[declarator] [opt pure_specifier]
| [opt identifier] : [constant_expression]
end define
define pure_specifier
= 0
end define
define base_spec
: [base_list]
end define
define base_list
[list base_specifier+]
end define
define base_specifier
[identifier]
| 'virtual [opt access_specifier] [identifier]
| [access_specifier] [opt 'virtual] [identifier]
end define
define access_specifier
'private
| 'protected
| 'public
end define
define conversion_function_name
'operator [conversion_type_name]
end define
define conversion_type_name
[type_specifiers] [opt ptr_operator]
end define
define ctor_initializer
: [mem_initializer_list]
end define
define mem_initializer_list
[list mem_initializer+]
end define
define mem_initializer
[identifier] ( [opt expression_list] )
end define
define operator_function_name
'operator [operator]
end define
define operator
'new | 'delete
| + | - | * | / | '% | ^ | & | '| | ~
| ! | = | < | > | += | -+ | *= | /= | '%=
| ^= | &= | '|= | << | >> | >>= | <<= | == | !=
| <= | >= | && | '|| | ++ | -- | , | ->* | ->
| () | '[ ']
end define
define statement
[labeled_statement]
| [null_statement]
| [expression_statement]
| [compound_statement]
| [selection_statement]
| [iteration_statement]
| [jump_statement]
| [declaration_statement]
end define
define labeled_statement
[identifier] : [dstatement]
| [EX] 'case [constant_expression] : [NL] [IN]
[statement]
| [EX] 'default : [NL] [IN]
[statement]
end define
define dstatement
[statement]
| [declaration_statement]
end define
define expression_statement
[expression] ; [NL]
end define
define null_statement
; [NL]
end define
define compound_statement
{ [NL] [IN]
[opt statement_list] [EX]
} [NL]
end define
define statement_list
[repeat dstatement+]
end define
define selection_statement
'if ( [expression] ) [statement] [opt else_statement]
| 'switch ( [expression] ) [compound_statement]
end define
define else_statement
'else [statement]
end define
define iteration_statement
'while ( [expression] ) [statement]
| 'do [statement] 'while ( [expression] ) ; [NL]
| 'for ( [for_init_statement] [opt expression] ; [opt expression] )
[for_body]
end define
define for_init_statement
[expression] ;
| [opt decl_specifiers] [opt declarator_list] ;
end define
define for_body
[compound_statement]
| [IN] [NL] [statement] [EX]
end define
define jump_statement
'break ; [NL]
| 'continue ; [NL]
| 'return [opt expression] ; [NL]
| 'goto [identifier] ; [NL]
end define
define declaration_statement
[declaration]
end define
define preprocessor
[SPOFF] # 'define [SPON] [identifier] [expression]
| [SPOFF] # 'define [SPON] [identifier] ( [list identifier+] ) [expression]
| [SPOFF] # 'else [SPON]
| [SPOFF] # 'endif [SPON]
| [SPOFF] # 'if [SPON] [expression]
| [SPOFF] # 'ifdef [SPON] [identifier]
| [SPOFF] # 'ifndef [SPON] [identifier]
| [SPOFF] # 'include [SPON] [stringlit]
| [SPOFF] # 'include [SPON] < [SPOFF] [filename] > [SPON]
| [SPOFF] # 'line [SPON] [integernumber] [opt stringlit]
| [SPOFF] # 'undef [SPON] [identifier]
end define
define filename
[identifier] [repeat dot_slash_identifier]
end define
define dot_slash_identifier
[opt '.] [opt '/] [identifier]
end define